#pragma pack(1)

/*******************************公共的数据包头和信息头****************************/
/* 通信协议中的时间格式，与lib文件夹下timeLib.h中的TIME_4_SHOW格式一致，
 * 不直接引用TIME_4_SHOW的原因为：需要使用霍耀森的大小端转换工具生成metaData文件，
 * 生成工具不能自动查找include文件中的结构*/
typedef struct
{
    unsigned int year:12;  /*年:0~4095*/
    unsigned int mon:4;    /*月:1~12*/
    unsigned int day:8;    /*日:1~31*/
    unsigned int hour:8;   /*时:0~23*/
    unsigned int min:6;    /*分:0~59*/
    unsigned int sec:6;    /*秒:0~59*/
    unsigned int ms:10;    /*毫秒:0~999*/
    unsigned int us:10;    /*微秒:0~999*/
}INTF_DC_TIME;

/*
 * 应用数据报文协议头(Q/FP907.3-2014), 24字节
 */

typedef struct
{
    unsigned short len;            /*整个报文总长度,字节为单位*/

    unsigned char needAck:1;       /*1表示本报文需要确认/应答*/
    unsigned char isAck:1;         /*1表示本报文是确认/应答报文*/
    unsigned char needFeedback:1;  /*1表示本报文需要反馈*/
    unsigned char isFeedback:1;    /*1表示本报文是反馈报文*/
    unsigned char resendNum:2;     /*重发次数,0:原报文,1/2:第一/二次重发报文*/
    unsigned char bak:2;           /*保留*/

    unsigned char infoNum;         /*该报文包含的信息单元个数*/

    unsigned int srcDevId;         /*源设备标识,发送方IP地址*/
    unsigned int dstDevId;         /*目的设备标识,接受方IP地址*/

    unsigned short seqNo;          /*序列号,表示报文的连续特征,循环加1*/
    unsigned short ackNo;          /*确认号,仅当isAck=1时本字段有效*/

    INTF_DC_TIME dateTime;         /*报文发送时刻*/

}PACK_HEAD;

/*
 * 信息单元头(Q/FP907.3-2014), 8字节
 */
typedef struct _INFO_HEAD
{
    unsigned short infoId;         /*信息单元标识 0x80*/
    unsigned short infoLen;        /*信息单元长度*/
    unsigned int infoTime;         /*信息单元形成时刻,单位0.1ms*/
}INFO_HEAD;


struct ST_TAR_DATA	/* 外引导指示数据结构 */
{
    unsigned char  ucValid;			/* 1有效 其他无效*/
    unsigned char  ucType;			/* 1 等待点 2 外引导 3 内引 4 卫星规划 其他无效*/
    char srcName[64]; // 数据来源名称
    unsigned int   uiTime;			/* 时间 ms*/
    unsigned int   uiCmdTarNo;		/* 目标外批号 未用*/

    unsigned char nseValid; // 0无效，1有效
    unsigned char cgcs200Valid; // 0无效，1有效
    unsigned char raeValid; // 0无效，1有效
    unsigned char lbhValid; // 0无效，1有效

    int iCmdX; 						/* 参数: 北天东坐标系下的x，量化单位：0.1m*/
    int iCmdY;						/* 参数: 北天东坐标系下的y，量化单位：0.1m*/
    int iCmdZ;						/* 参数: 北天东坐标系下的z，量化单位：0.1m*/
    short sCmdVx;					/* 参数: 北天东坐标系下的x速度，量化单位：1m/s*/
    short sCmdVy;					/* 参数: 北天东坐标系下的y速度，量化单位：1m/s*/
    short sCmdVz;					/* 参数: 北天东坐标系下的z速度，量化单位：1m/s*/

    int iCgcs2000X;						/* 参数: 地心坐标系下的x，量化单位：0.1m*/
    int iCgcs2000Y;						/* 参数: 地心坐标系下的y，量化单位：0.1m*/
    int iCgcs2000Z;						/* 参数: 地心坐标系下的z，量化单位：0.1m*/
    short sCgcs2000Vx;					/* 参数: 地心坐标系下的x速度，量化单位：1m/s*/
    short sCgcs2000Vy;					/* 参数: 地心坐标系下的y速度，量化单位：1m/s*/
    short sCgcs2000Vz;					/* 参数: 地心坐标系下的z速度，量化单位：1m/s*/

    int iR; // 0.1m
    int iA; // 0.001度
    int iE; // 0.001度
    int iVr; // 0.01m
    int iVa; // 0.0001度/s
    int iVe; // 0.0001度/s

    int iL; // 1e-7度 -180~180
    int iB; // 1e-7度 -90~90
    int iHeight; // 0.1m

    int sameRoutePos; // 该引导数据在同站中的位置

    // 高精度速度,范围-21475~21474 m/s
    int iHighResCgcs2000Vx; // 参数: 地心坐标系下的x速度，量化单位：1e-5m/s
    int iHighResCgcs2000Vy;	// 参数: 地心坐标系下的y速度，量化单位：1e-5m/s
    int iHighResCgcs2000Vz; // 参数: 地心坐标系下的z速度，量化单位：1e-5m/s

    int bak[6];
};

struct ST_CMD_4256	/* 外引导指示命令结构 */
{
    unsigned short usCmdNo;			/* 命令号 4256 */
    unsigned short usCmdAttribute;	/* 命令属性 */

    struct ST_TAR_DATA stYdData;/*引导数据*/
};

struct GUIDE_TO_MONITOR
{
    PACK_HEAD PackHead;
    INFO_HEAD InfoHead;
    struct ST_CMD_4256 GuideData;
};

#pragma pack()
